<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <!-- <script src="/新建文件夹/node_modules/lodash"></script> -->
    <!-- <script src="https://cdn.jsdelivr.net/npm/lodash@4.17.19/lodash.min.js"></script> -->
    <script src="https://cdn.jsdelivr.net/npm/lodash@4.17.19/lodash.js"></script>
</head>
<body>
    <script>
        // PointFree:把数据处理的过程定义成与数据无关的合成运算.不需要用到代表数据的参数,只要把简单的运算步骤合成到一起.
        // 特点:
        // 1,不需要指明处理的数据
        // 2,只需要合成运算过程
        // 3,在使用PointFree模式之前,需要定义一些辅助的基本运算函数
        
        // demo :要求字符串Hello    World  =>   hello_world  
        // 想要的过程是:1全部小写,2将所有空格都替换成下划线
        // const fp = require('lodash/fp');//require只能在node中使用
        const fp = _;
        const f = fp.flowRight(fp.replace(/\s+/g,'_'),fp.toLower());
        //此块代码段执行的逻辑:
        // 1,函数f是一个组合函数,从右向左,先执行转小写的函数,再执行replace,而replace方法由于缺失参数还会返回一个函数来接收需要的参数
        // 2,fp.replace()方法满足柯里化,replace需要传入三个参数,1替换条件,2替换内容,3需要被替换的内容.
        // 3,fp.replace(/\s+/g,'_')表示要把全局多个的空格替换成下划线,还缺失一个参数,fp模式下会继续返回一个函数来接收需要的参数
        console.log(f('Hello    World'));//hello_world

        // demo:提取字符串中的首字母并转为大写,使用.作为分隔符:  world wild web =>  W.W.W
        // 实现思路:
        // 1,先使用空格切割字符串,转成数组;
        // 2,转大写
        // 3,拿到首字母
        // 4,使用.作为连接符将首字母合并起来
        // const firstLetterToUpper = fp.flowRight(fp.join('.'),fp.map(fp.first),fp.map(fp.toUpper),fp.split(''));//每调用一次map函数会遍历一次数组,所以这里会遍历两次数组
        // const firstLetterToUpper = fp.flowRight(fp.join('.'),fp.map(fp.flowRight(fp.first,fp.toUpper)),fp.split(''));//这样的话就只调用一次map方法,只遍历一次数组,提高了效率
        // console.log(firstLetterToUpper('world wild web'));
        



    </script>

</body>
</html>